/******************************************************************************* * Signavio Core Components * Copyright (C) 2012 Signavio GmbH * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ package org.oryxeditor.server.diagram.label; import java.util.HashSet; import java.util.Set; /** * Wrapper class for a set of {@link Anchor} that can be used to define positioning policies of labels * @author philipp.maschke * */ public class Anchors { /** * Enumeration of anchor positions * @author philipp.maschke * */ public enum Anchor { BOTTOM("bottom"), TOP("top"), LEFT("left"), RIGHT("right"); /** * Returns the matching object for the given string * @param enumString * @throws IllegalArgumentException if no matching enumeration object was found * @return */ public static Anchor fromString(String enumString) { if (enumString == null) return null; for (Anchor attrEnum : values()) { if (attrEnum.label.equals(enumString) || attrEnum.name().equals(enumString)) return attrEnum; } throw new IllegalArgumentException("No matching enum constant found in '" + Anchor.class.getSimpleName() + "' for: " + enumString); } private String label; Anchor(String label) { this.label = label; } @Override public String toString() { return label; } } public static Anchors fromString(String anchorsString){ if (anchorsString == null) return null; anchorsString = anchorsString.trim(); if (anchorsString.equals("")) return null; Anchors result = new Anchors(); for (String anchorString: anchorsString.split(" ")){ result.addAnchor(Anchor.fromString(anchorString)); } return result; } private Set<Anchor> anchors = new HashSet<Anchor>(); public Anchors(Anchor...anchors){ for (Anchor anchor: anchors){ this.anchors.add(anchor); } } public void addAnchor(Anchor newAnchor){ anchors.add(newAnchor); } public String toString(){ StringBuffer buff = new StringBuffer(); for (Anchor anchor: anchors){ if (buff.length() > 0) buff.append(" "); buff.append(anchor.toString()); } return buff.toString(); } public int size(){ return anchors.size(); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((anchors == null) ? 0 : anchors.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Anchors other = (Anchors) obj; if (anchors == null) { if (other.anchors != null) return false; } else if (!anchors.equals(other.anchors)) return false; return true; } public boolean contains(Anchor anchor){ return anchors.contains(anchor); } }